package cn.com.zero.manager.auth.mapper;

import cn.com.zero.manager.auth.po.MenuPO;
import cn.com.zero.manager.auth.po.RolePO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author guoxin
 * @version 1.0.0
 * @Description
 * @date 2023/4/10 14:35
 */
@Mapper
@Repository
public interface IManagerRoleMapper {

    /**
     * 查询角色列表
     *
     * @return
     */
    List<RolePO> queryRoleList();

    /**
     * 验证角色名称是否存在
     *
     * @param roleName  角色名称
     * @return
     */
    RolePO isExistName(String roleName);

    /**
     * 验证角色编号是否存在
     *
     * @param roleCode  角色编号
     * @return
     */
    RolePO isExistRoleCode(String roleCode);

    /**
     * 查询所有菜单
     *
     * @return
     */
    List<MenuPO> selectMenuList();

    /**
     * 查询属于某个系统的所有菜单
     *
     * @param systemId  系统编号
     * @return
     */
    List<MenuPO> querySystemMenuList(String systemId);

    /**
     * 超级管理员添加角色
     *
     * @param roleCode  角色编号
     */
    void addManageRole(String roleCode);

    /**
     * 添加角色
     *
     * @param roleCode  角色编号
     * @param roleName  角色名称
     * @param note      备注信息
     * @param sort      排序号
     */
    void addRole(@Param("roleCode") String roleCode,
                 @Param("roleName") String roleName,
                 @Param("note") String note,
                 @Param("sort") Integer sort);

    /**
     * 添加角色对应的权限
     *
     * @param roleCode  角色编号
     * @param menus     菜单权限
     */
    void addRoleMenu(@Param("roleCode") String roleCode,
                     @Param("menus") Long[] menus);

    /**
     * 修改角色
     *
     * @param roleCode  编号
     * @param roleName  名称
     * @param sort      排序号
     * @param note      备注信息
     */
    void updateRole(@Param("roleCode") String roleCode,
                    @Param("roleName") String roleName,
                    @Param("sort") Integer sort,
                    @Param("note") String note);

    /**
     * 删除角色
     *
     * @param roles 角色编号集合
     */
    void deleteRoleBatch(@Param("roles") String[] roles);

    /**
     * 删除角色对应权限
     *
     * @param roles 角色编号集合
     */
    void deleteRoleMenuBatch(@Param("roles") String[] roles);

    /**
     * 删除拥有角色的管理员
     *
     * @param roles 角色编号集合
     */
    void deleteRoleManageBatch(@Param("roles") String[] roles);

    /**
     * 查询角色有权限的菜单集合
     *
     * @param roleCode  角色编号
     * @return
     */
    List<Long> queryRoleMenuList(String roleCode);

    /**
     * 删除角色对应权限 by 角色编号
     *
     * @param roleCode  角色编号
     */
    void deleteRoleMenu(String roleCode);

    /**
     * 查询角色关联的管理员
     *
     * @param roleCode  角色编号
     * @return
     */
    List<String> queryRoleAdminList(String roleCode);
}
